package com.liuyucheng.interview.ref;

import java.lang.ref.WeakReference;

/**
 * 对象的引用有哪几种类型
 *
 * @author LiuYuCheng
 * @date 2025年06月05日 15:33
 */
public class TestRef {
    public static void main(String[] args) {
        //软引用
        //软引用是一种相对较弱的引用，只有在内存不足时才会被回收
        //软引用通常用于缓存对象，当内存不足时，可以释放一些缓存对象，从而避免内存溢出
//        User obj = new User();
//        obj.setName("liuyucheng");
//        SoftReference<User> softRef = new SoftReference<>(obj);
//        obj = null; // 断开强引用
//
//        // 此时obj仅被软引用关联，内存不足时会被回收
//        User retrievedObj = softRef.get(); // 获取引用对象
//        System.out.println(retrievedObj.getName());


        Object obj = new Object();
        WeakReference<Object> weakRef = new WeakReference<>(obj);
        obj = null; // 断开强引用

        System.gc();
        // 此时obj仅被弱引用关联，下次GC时会被回收
        Object retrievedObj = weakRef.get(); // 可能为null
        System.out.println(retrievedObj);
    }
}
